import { isNumber } from "@tarojs/shared";
import dayjs from "dayjs";

export const richTextFormater = (val?: string) => {
  if (val && val.trim?.()) {
    return val.replace(/<img([^>]*?)>/g, function (match, group1) {
      // 查找 style 属性
      const hasStyle = group1.includes('style="');

      if (hasStyle) {
        // 如果有 style 属性，替换为自定义的 style
        return match.replace(
          /style="[^"]*"/,
          'style="max-width:100%;height:auto;"'
        );
      } else {
        // 如果没有 style 属性，添加自定义的 style
        return `<img${group1} style="max-width:100%;height:auto;">`;
      }
    });
  }

  return val;
};

/**
 * 格式化价格
 * 1. 区间价取最小值 (1,2)
 * 2. 分转元
 */
export const formatPrice = (price?: string | number) => {
  if (!price) return 0;

  return Math.min(
    ...price
      .toString()
      .split(",")
      .map((e) => Number(e) / 100)
  );
};

/**
 * 处理 prop ，加单位
 * @param size
 * @returns
 */
export const suffixUnit = (size?: number | string) => {
  if (size) {
    return isNumber(size) ? size + "rpx" : size;
  }
};

/**
 * 拼接字符串
 */
export const joinStr = (str, newStr, symbol: string = ";") => {
  const reg = new RegExp(`${symbol}$`);
  return (str && !reg.test(str) ? str + symbol : "") + newStr;
};

/**
 * 获取扩展名
 * @param filename
 * @returns
 */
export function getFileExtension(filename: string) {
  // 使用正则表达式匹配扩展名（不包括点）
  const extension = filename.match(/\.([^.]+)$/);
  // 如果匹配到扩展名，则返回扩展名部分；否则返回空字符串
  return extension ? extension[1] : "";
}

// 补零函数，确保两位数显示
const padZero = (value) => value.toString().padStart(2, "0");

/**
 * 把数值转成指定时间格式
 * @param num 单位秒
 * @returns YYYY:mm:ss
 */
export function formatSeconds(num) {
  if (typeof num !== "number" || num <= 0) {
    return "00:00:00"; // 无效输入返回默认值
  }

  const hours = Math.floor(num / 3600);
  const minutes = Math.floor((num % 3600) / 60);
  const seconds = Math.floor(num % 60);

  return `${padZero(hours)}:${padZero(minutes)}:${padZero(seconds)}`;
}

/**
 * 结算时间差
 *
 * @param endTime 结束时间
 * @param startTime 开始时间
 * @returns
 */
export function calculateTimeDifference(endTime, startTime) {
  const now = dayjs();
  const start = dayjs(startTime);
  const end = dayjs(endTime);

  // 检查当前时间是否在开始和结束时间范围内
  if (now.isAfter(start) && now.isBefore(end)) {
    // 计算结束时间到当前时间的差值（秒）
    const differenceInSeconds = end.diff(now, "second");
    return differenceInSeconds;
  }

  // 如果不在范围内，返回0
  return 0;
}

/**
 * 把查询参数转成对象
 * @param queryString
 * @returns
 */
export function parseQueryString<T = unknown>(queryString) {
  const obj = {} as T;
  // 去除开头的问号（如果有的话）
  if (queryString.startsWith("?")) {
    queryString = queryString.slice(1);
  }
  const pairs = queryString.split("&");
  for (let pair of pairs) {
    const [key, value] = pair.split("=");
    if (key) {
      // 对键和值进行URL解码
      obj[decodeURIComponent(key)] = decodeURIComponent(value || "");
    }
  }
  return obj;
}
